오버라이딩(Overriding)

✒️ 2025-05-16 13:55 내용 수정


1. 메서드 오버로드

같은 이름의 메서드를 중복하여 정의하는 것

public ClassName(); 
public ClassName(int); 
public ClassName(double); 
public ClassName(int a, String "");

2. 메서드 오버라이딩

상속관계에서 상위클래스가 상속해준 메서드의 내용을 다시 정의하여 메서드를 구현하는 기술

public class Car {

	public void turnOn() {
		System.out.println("시동 거는 중");
	}
	
	public void turnOff() {
		System.out.println("시동 끄는 중");
	}

	// static 메서드
	// 자식 클래스에서 오버라이딩 불가
	public static void colorChange() {
		System.out.println("색상 설정");
	}
}
public class MorningCar extends Car {

	// Car.turnOn()을 재정의
	@Override
	public void turnOn() {
		super.turnOn(); // Car.turnOn() 내용이 실행된다
		System.out.println("Morning과 함께 출발!");
	}

	// Car.turnOff()를 재정의
	@Override
	public void turnOff() {
		super.turnOff(); // Car.turnOff() 내용이 실행된다
		System.out.println("안전하게 도착!");
	}

	// 부모 클래스의 static 메서드 재정의 시
	// 부모 클래스의 메서드가 가려짐(Hiding)
	// 환경에 따라 부모와 자식의 메서드 모두 호출 가능
	public static void colorChange() {
		System.out.println("검은색");
	}
}
public class CarTest {

	public static void main(String[] args) {
		Car.colorChange(); // 색상 설정
		MorningCar.colorChange(); // 검은색

		MorningCar myCar = new MorningCar;
		myCar.turnOn(); // 시동 거는 중
						// Morning과 함께 출발!
		myCar.turnOff(); // 시동 끄는 중
						// 안전하게 도착!
	}
}